home *** CD-ROM | disk | FTP | other *** search
/ Cre@te Online 2000 December / Cre@teOnline CD05.iso / MacSoft / XML ConsoleMax.sea / XML ConsoleMax / Required / xalan.jar / org / apache / xalan / xslt / XSLTEngineImpl.class (.txt) < prev    next >
Encoding:
Java Class File  |  2000-04-12  |  41.1 KB  |  1,862 lines

  1. package org.apache.xalan.xslt;
  2.  
  3. import java.io.File;
  4. import java.io.FileNotFoundException;
  5. import java.io.IOException;
  6. import java.io.ObjectOutputStream;
  7. import java.io.OutputStream;
  8. import java.io.PrintWriter;
  9. import java.lang.reflect.Constructor;
  10. import java.net.MalformedURLException;
  11. import java.net.URL;
  12. import java.util.Date;
  13. import java.util.Hashtable;
  14. import java.util.Stack;
  15. import java.util.StringTokenizer;
  16. import java.util.TooManyListenersException;
  17. import java.util.Vector;
  18. import org.apache.xalan.xpath.XBoolean;
  19. import org.apache.xalan.xpath.XLocator;
  20. import org.apache.xalan.xpath.XNodeSet;
  21. import org.apache.xalan.xpath.XNull;
  22. import org.apache.xalan.xpath.XNumber;
  23. import org.apache.xalan.xpath.XObject;
  24. import org.apache.xalan.xpath.XPath;
  25. import org.apache.xalan.xpath.XPathEnvSupport;
  26. import org.apache.xalan.xpath.XPathFactory;
  27. import org.apache.xalan.xpath.XPathProcessorImpl;
  28. import org.apache.xalan.xpath.XPathSupport;
  29. import org.apache.xalan.xpath.XRTreeFrag;
  30. import org.apache.xalan.xpath.XString;
  31. import org.apache.xalan.xpath.dtm.DTMLiaison;
  32. import org.apache.xalan.xpath.xdom.XercesLiaison;
  33. import org.apache.xalan.xpath.xml.BoolStack;
  34. import org.apache.xalan.xpath.xml.FormatterToDOM;
  35. import org.apache.xalan.xpath.xml.FormatterToHTML;
  36. import org.apache.xalan.xpath.xml.FormatterToXML;
  37. import org.apache.xalan.xpath.xml.MutableAttrListImpl;
  38. import org.apache.xalan.xpath.xml.PrefixResolver;
  39. import org.apache.xalan.xpath.xml.ProblemListener;
  40. import org.apache.xalan.xpath.xml.ProblemListenerDefault;
  41. import org.apache.xalan.xpath.xml.QName;
  42. import org.apache.xalan.xpath.xml.StringToStringTable;
  43. import org.apache.xalan.xpath.xml.TreeWalker;
  44. import org.apache.xalan.xpath.xml.XMLParserLiaison;
  45. import org.apache.xalan.xpath.xml.XMLParserLiaisonDefault;
  46. import org.apache.xalan.xpath.xml.XSLMessages;
  47. import org.apache.xalan.xslt.trace.GenerateEvent;
  48. import org.apache.xalan.xslt.trace.TraceListener;
  49. import org.apache.xerces.dom.NodeImpl;
  50. import org.w3c.dom.Attr;
  51. import org.w3c.dom.CDATASection;
  52. import org.w3c.dom.Comment;
  53. import org.w3c.dom.DOMException;
  54. import org.w3c.dom.Document;
  55. import org.w3c.dom.DocumentFragment;
  56. import org.w3c.dom.Element;
  57. import org.w3c.dom.EntityReference;
  58. import org.w3c.dom.NamedNodeMap;
  59. import org.w3c.dom.Node;
  60. import org.w3c.dom.NodeList;
  61. import org.w3c.dom.ProcessingInstruction;
  62. import org.w3c.dom.Text;
  63. import org.xml.sax.AttributeList;
  64. import org.xml.sax.DocumentHandler;
  65. import org.xml.sax.ErrorHandler;
  66. import org.xml.sax.InputSource;
  67. import org.xml.sax.Locator;
  68. import org.xml.sax.SAXException;
  69.  
  70. public class XSLTEngineImpl implements XPathEnvSupport, XSLTProcessor {
  71.    StylesheetRoot m_stylesheetRoot;
  72.    Node m_rootDoc;
  73.    static final double m_XSLTVerSupported = (double)1.0F;
  74.    static final String m_XSLNameSpaceURL = "http://www.w3.org/1999/XSL/Transform";
  75.    static final String m_XSLT4JNameSpaceURL = "http://xml.apache.org/xslt";
  76.    boolean m_quietConflictWarnings = false;
  77.    private boolean m_traceTemplateChildren = false;
  78.    private boolean m_traceTemplates = false;
  79.    boolean m_traceSelects = false;
  80.    PrintWriter m_diagnosticsPrintWriter;
  81.    Hashtable m_durationsTable = new Hashtable();
  82.    Stack m_stylesheetLocatorStack = new Stack();
  83.    protected String m_pendingElementName;
  84.    protected boolean m_pendingStartDoc = false;
  85.    MutableAttrListImpl m_pendingAttributes = new MutableAttrListImpl();
  86.    protected Stack m_resultNameSpaces = new Stack();
  87.    static final ResultNameSpace m_emptyNamespace = new ResultNameSpace((String)null, (String)null);
  88.    int m_uniqueNSValue;
  89.    /** @deprecated */
  90.    boolean m_translateCSS = false;
  91.    Vector m_topLevelParams = new Vector();
  92.    XMLParserLiaison m_parserLiaison;
  93.    DocumentHandler m_flistener;
  94.    protected Node m_currentNode;
  95.    boolean m_needToCheckForInfiniteLoops = false;
  96.    private StackGuard m_stackGuard = new StackGuard(this);
  97.    private VariableStack m_variableStacks = new VariableStack();
  98.    private String m_outputFileName;
  99.    Stack m_cdataStack = new Stack();
  100.    ResultTreeHandler m_resultTreeHandler = new ResultTreeHandler(this);
  101.    private static XSLMessages m_XSLMessages = new XSLMessages();
  102.    private static final Boolean TRUE = new Boolean(true);
  103.    private static final Boolean FALSE = new Boolean(false);
  104.    transient Vector m_key_tables;
  105.    transient Stack m_attrSetStack;
  106.    private transient CountersTable m_countersTable;
  107.    BoolStack m_currentTemplateRuleIsNull = new BoolStack();
  108.    public static int m_recursionLimit = -1;
  109.    transient Vector m_traceListeners;
  110.    private FormatterToDOM m_sourceTreeHandler;
  111.    private OutputStream m_outputStream;
  112.    private boolean m_isCData = false;
  113.    boolean m_mustFlushStartDoc = false;
  114.  
  115.    final VariableStack getVarStack() {
  116.       return this.m_variableStacks;
  117.    }
  118.  
  119.    CountersTable getCountersTable() {
  120.       if (this.m_countersTable == null) {
  121.          this.m_countersTable = new CountersTable();
  122.       }
  123.  
  124.       return this.m_countersTable;
  125.    }
  126.  
  127.    protected XSLTEngineImpl() throws SAXException {
  128.       try {
  129.          String var1 = "org.apache.xalan.xpath.dtm.DTMLiaison";
  130.          Class var2 = Class.forName(var1);
  131.          Constructor var3 = var2.getConstructor((Class[])null);
  132.          this.m_parserLiaison = (XMLParserLiaison)var3.newInstance((Object[])null);
  133.          this.m_parserLiaison.setEnvSupport(this);
  134.       } catch (Exception var4) {
  135.          throw new XSLProcessorException(var4);
  136.       }
  137.    }
  138.  
  139.    public XSLTEngineImpl(String var1) throws SAXException {
  140.       try {
  141.          Class var2 = Class.forName(var1);
  142.          Constructor var3 = var2.getConstructor((Class[])null);
  143.          this.m_parserLiaison = (XMLParserLiaison)var3.newInstance((Object[])null);
  144.          this.m_parserLiaison.setEnvSupport(this);
  145.       } catch (Exception var4) {
  146.          throw new XSLProcessorException(var4);
  147.       }
  148.    }
  149.  
  150.    public XSLTEngineImpl(XMLParserLiaison var1) {
  151.       this.setExecContext(var1);
  152.    }
  153.  
  154.    XSLTEngineImpl(XMLParserLiaison var1, XPathFactory var2) {
  155.       this.setExecContext(var1);
  156.    }
  157.  
  158.    public void reset() {
  159.       this.m_stylesheetRoot = null;
  160.       this.m_rootDoc = null;
  161.       this.m_durationsTable.clear();
  162.       this.m_countersTable = null;
  163.       this.m_stylesheetLocatorStack.removeAllElements();
  164.       this.m_stylesheetLocatorStack = new Stack();
  165.       this.m_pendingElementName = null;
  166.       this.m_pendingAttributes.clear();
  167.       this.m_pendingAttributes = new MutableAttrListImpl();
  168.       this.m_resultNameSpaces.removeAllElements();
  169.       this.m_cdataStack = new Stack();
  170.       this.m_currentNode = null;
  171.       this.m_needToCheckForInfiniteLoops = false;
  172.       this.m_variableStacks = new VariableStack();
  173.       this.m_stackGuard = new StackGuard(this);
  174.       this.m_parserLiaison.reset();
  175.    }
  176.  
  177.    StackGuard getStackGuard() {
  178.       return this.m_stackGuard;
  179.    }
  180.  
  181.    private void writeObject(ObjectOutputStream var1) throws SAXException, IOException {
  182.       this.error(47);
  183.    }
  184.  
  185.    void switchLiaisonsIfNeeded(Node var1, Node var2) throws SAXException {
  186.       if (var2 != null && var2 instanceof NodeImpl && this.m_parserLiaison instanceof DTMLiaison) {
  187.          if (var1 != null && !(var1 instanceof NodeImpl)) {
  188.             throw new SAXException(XSLMessages.createMessage(102, (Object[])null));
  189.          } else {
  190.             XercesLiaison var4 = new XercesLiaison();
  191.             var4.copyFromOtherLiaison((XMLParserLiaisonDefault)this.m_parserLiaison);
  192.             this.setExecContext(var4);
  193.          }
  194.       } else {
  195.          if (var1 != null && var1 instanceof NodeImpl && this.m_parserLiaison instanceof DTMLiaison) {
  196.             if (var2 != null && !(var2 instanceof NodeImpl)) {
  197.                throw new SAXException(XSLMessages.createMessage(102, (Object[])null));
  198.             }
  199.  
  200.             XercesLiaison var3 = new XercesLiaison();
  201.             var3.copyFromOtherLiaison((XMLParserLiaisonDefault)this.m_parserLiaison);
  202.             this.setExecContext(var3);
  203.          }
  204.  
  205.       }
  206.    }
  207.  
  208.    public void process(XSLTInputSource var1, XSLTInputSource var2, XSLTResultTarget var3) throws SAXException {
  209.       try {
  210.          this.switchLiaisonsIfNeeded(var1.getNode(), var3.getNode());
  211.          if (var2 != null && ((InputSource)var2).getSystemId() != null) {
  212.             ((InputSource)var2).getSystemId();
  213.          }
  214.  
  215.          Boolean var4 = new Boolean(true);
  216.          this.pushTime(var4);
  217.          Node var5 = null;
  218.          if (var1 != null) {
  219.             var5 = this.getSourceTreeFromInput(var1);
  220.          }
  221.  
  222.          if (var2 != null) {
  223.             this.m_stylesheetRoot = this.processStylesheet(var2);
  224.          } else if (var5 == null) {
  225.             this.error(48);
  226.          } else {
  227.             Object var6 = null;
  228.             Stack var7 = new Stack();
  229.  
  230.             for(Node var8 = var5.getFirstChild(); var8 != null; var8 = var8.getNextSibling()) {
  231.                if (var8.getNodeType() == 7) {
  232.                   ProcessingInstruction var9 = (ProcessingInstruction)var8;
  233.                   if (var9.getNodeName().equals("xml-stylesheet") || var9.getNodeName().equals("xml:stylesheet")) {
  234.                      boolean var10 = true;
  235.                      StringTokenizer var11 = new StringTokenizer(var9.getNodeValue(), " \t=");
  236.  
  237.                      while(var11.hasMoreTokens()) {
  238.                         if (var11.nextToken().equals("type")) {
  239.                            String var12 = var11.nextToken();
  240.                            var12 = var12.substring(1, var12.length() - 1);
  241.                            if (!var12.equals("text/xsl")) {
  242.                               var10 = false;
  243.                            }
  244.                         }
  245.                      }
  246.  
  247.                      if (var10) {
  248.                         var11 = new StringTokenizer(var9.getNodeValue(), " \t=");
  249.  
  250.                         while(var11.hasMoreTokens()) {
  251.                            if (var11.nextToken().equals("href")) {
  252.                               String var17 = var11.nextToken();
  253.                               var17 = var17.substring(1, var17.length() - 1);
  254.                               var7.push(var17);
  255.                            }
  256.                         }
  257.                      }
  258.                   }
  259.                }
  260.             }
  261.  
  262.             boolean var19 = true;
  263.  
  264.             for(Stylesheet var20 = null; !((Vector)var7).isEmpty(); var19 = false) {
  265.                Stylesheet var22 = this.getStylesheetFromPIURL((String)var7.pop(), var5, var1 != null ? ((InputSource)var1).getSystemId() : null, var19);
  266.                if (!var19) {
  267.                   var20.m_imports.addElement(var22);
  268.                }
  269.  
  270.                var20 = var22;
  271.             }
  272.          }
  273.  
  274.          if (this.m_stylesheetRoot == null) {
  275.             this.error(49);
  276.          }
  277.  
  278.          if (var5 != null) {
  279.             this.m_stylesheetRoot.process(this, var5, var3);
  280.             if (this.m_diagnosticsPrintWriter != null) {
  281.                this.displayDuration("Total time", var4);
  282.                return;
  283.             }
  284.          }
  285.       } catch (MalformedURLException var13) {
  286.          this.error(0, new Object[]{((Throwable)var13).getMessage()}, var13);
  287.          return;
  288.       } catch (FileNotFoundException var14) {
  289.          this.error(0, new Object[]{((Throwable)var14).getMessage()}, var14);
  290.          return;
  291.       } catch (IOException var15) {
  292.          this.error(0, new Object[]{((Throwable)var15).getMessage()}, var15);
  293.          return;
  294.       } catch (SAXException var16) {
  295.          this.error(79, (Exception)var16);
  296.       }
  297.  
  298.    }
  299.  
  300.    public StylesheetRoot createStylesheetRoot(String var1) throws MalformedURLException, FileNotFoundException, IOException, SAXException {
  301.       return new StylesheetRoot(this, var1);
  302.    }
  303.  
  304.    public StylesheetRoot processStylesheet(XSLTInputSource var1) throws SAXException {
  305.       if (this.m_stylesheetRoot != null) {
  306.          this.reset();
  307.       }
  308.  
  309.       String var2 = var1 != null && ((InputSource)var1).getSystemId() != null ? ((InputSource)var1).getSystemId() : "Input XSL";
  310.  
  311.       try {
  312.          this.m_stylesheetRoot = this.createStylesheetRoot(((InputSource)var1).getSystemId());
  313.          this.addTraceListenersToStylesheet();
  314.          StylesheetHandler var3 = new StylesheetHandler(this, this.m_stylesheetRoot);
  315.          if (var1.getNode() != null) {
  316.             if (var1.getNode() instanceof StylesheetRoot) {
  317.                this.m_stylesheetRoot = (StylesheetRoot)var1.getNode();
  318.             } else {
  319.                TreeWalker var4 = new TreeWalker(var3);
  320.                var4.traverse(var1.getNode());
  321.             }
  322.          } else {
  323.             this.diag("========= Parsing " + var2 + " ==========");
  324.             this.pushTime(var2);
  325.             this.m_parserLiaison.setDocumentHandler(var3);
  326.             this.m_parserLiaison.parse(var1);
  327.             if (this.m_diagnosticsPrintWriter != null) {
  328.                this.displayDuration("Parse of " + var2, var2);
  329.             }
  330.          }
  331.       } catch (Exception var5) {
  332.          this.error(50, new Object[]{var2}, var5);
  333.       }
  334.  
  335.       return this.m_stylesheetRoot;
  336.    }
  337.  
  338.    public StylesheetRoot processStylesheet(String var1) throws SAXException {
  339.       try {
  340.          XSLTInputSource var2 = new XSLTInputSource(this.getURLFromString(var1, (String)null).toString());
  341.          return this.processStylesheet(var2);
  342.       } catch (SAXException var3) {
  343.          this.error(78, (Exception)var3);
  344.          return null;
  345.       }
  346.    }
  347.  
  348.    public void setStylesheet(StylesheetRoot var1) {
  349.       this.m_stylesheetRoot = var1;
  350.    }
  351.  
  352.    public StylesheetRoot getStylesheet() {
  353.       return this.m_stylesheetRoot;
  354.    }
  355.  
  356.    public String getOutputFileName() {
  357.       return this.m_outputFileName;
  358.    }
  359.  
  360.    public void setOutputFileName(String var1) {
  361.       this.m_outputFileName = var1;
  362.    }
  363.  
  364.    public URL getURLFromString(String var1, String var2) throws SAXException {
  365.       return this.m_parserLiaison.getURLFromString(var1, var2);
  366.    }
  367.  
  368.    public Node getSourceTreeFromInput(XSLTInputSource var1) throws SAXException {
  369.       String var3 = var1 != null && ((InputSource)var1).getSystemId() != null ? ((InputSource)var1).getSystemId() : "Input XML";
  370.       Object var2;
  371.       if (var1.getNode() != null) {
  372.          if (this.getXMLProcessorLiaison() instanceof DTMLiaison) {
  373.             this.error(97);
  374.          }
  375.  
  376.          var2 = var1.getNode();
  377.       } else {
  378.          try {
  379.             this.diag("========= Parsing " + var3 + " ==========");
  380.             this.pushTime(var3);
  381.             this.m_parserLiaison.parse(var1);
  382.             if (this.m_diagnosticsPrintWriter != null) {
  383.                this.displayDuration("Parse of " + var3, var3);
  384.             }
  385.  
  386.             var2 = this.m_parserLiaison.getDocument();
  387.          } catch (Exception var5) {
  388.             Exception var4 = var5;
  389.             if (var5 instanceof SAXException && ((SAXException)var5).getException() != null) {
  390.                var4 = ((SAXException)var5).getException();
  391.             }
  392.  
  393.             var2 = null;
  394.             this.error(50, new Object[]{var3}, var4);
  395.          }
  396.       }
  397.  
  398.       return (Node)var2;
  399.    }
  400.  
  401.    public Document parseXML(URL var1, DocumentHandler var2, Document var3) throws SAXException, IOException {
  402.       Object var4 = this.getSourceDocsTable().get(var1.toExternalForm());
  403.       if (var4 != null) {
  404.          return (Document)var4;
  405.       } else {
  406.          XSLTInputSource var6 = new XSLTInputSource(var1.toString());
  407.          if (var2 != null) {
  408.             this.m_parserLiaison.setDocumentHandler(var2);
  409.          }
  410.  
  411.          this.m_parserLiaison.parse(var6);
  412.          Document var5;
  413.          if (var2 == null) {
  414.             var5 = this.m_parserLiaison.getDocument();
  415.          } else {
  416.             var5 = var3;
  417.          }
  418.  
  419.          return var5;
  420.       }
  421.    }
  422.  
  423.    public StylesheetSpec getAssociatedStylesheet(XSLTInputSource var1, String var2, String var3) throws SAXException {
  424.       Vector var4 = this.getAssociatedStylesheets(var1, var2, var3);
  425.       return var4 != null ? (StylesheetSpec)var4.elementAt(0) : null;
  426.    }
  427.  
  428.    public Vector getAssociatedStylesheets(XSLTInputSource var1, String var2, String var3) throws SAXException {
  429.       Vector var4 = null;
  430.       Node var5 = this.getSourceTreeFromInput(var1);
  431.  
  432.       for(Node var6 = var5.getFirstChild(); var6 != null; var6 = var6.getNextSibling()) {
  433.          if (var6.getNodeType() == 7) {
  434.             ProcessingInstruction var7 = (ProcessingInstruction)var6;
  435.             if (var7.getNodeName().equals("xml-stylesheet") || var7.getNodeName().equals("xml:stylesheet")) {
  436.                String var8 = null;
  437.                String var9 = null;
  438.                String var10 = null;
  439.                String var11 = null;
  440.                String var12 = null;
  441.                boolean var13 = false;
  442.                StringTokenizer var14 = new StringTokenizer(var7.getNodeValue(), " \t=");
  443.  
  444.                while(var14.hasMoreTokens()) {
  445.                   String var15 = var14.nextToken();
  446.                   if (var15.equals("type")) {
  447.                      String var16 = var14.nextToken();
  448.                      var9 = var16.substring(1, var16.length() - 1);
  449.                   } else if (var15.equals("href")) {
  450.                      var8 = var14.nextToken();
  451.                      var8 = var8.substring(1, var8.length() - 1);
  452.                   } else if (var15.equals("title")) {
  453.                      var10 = var14.nextToken();
  454.                      var10 = var10.substring(1, var10.length() - 1);
  455.                   } else if (var15.equals("media")) {
  456.                      var11 = var14.nextToken();
  457.                      var11 = var11.substring(1, var11.length() - 1);
  458.                   } else if (var15.equals("charset")) {
  459.                      var12 = var14.nextToken();
  460.                      var12 = var12.substring(1, var12.length() - 1);
  461.                   } else if (var15.equals("alternate")) {
  462.                      String var22 = var14.nextToken();
  463.                      var13 = var22.substring(1, var22.length() - 1).equals("yes");
  464.                   }
  465.                }
  466.  
  467.                if (var9 != null && var9.equals("text/xsl") && var8 != null && (var2 == null || var11 != null && var11.equals(var2)) && (var3 == null || var12 != null && var12.equals(var3))) {
  468.                   if (var4 == null) {
  469.                      var4 = new Vector();
  470.                   }
  471.  
  472.                   StylesheetSpec var21 = new StylesheetSpec(var8, var9, var10, var11, var13, var12);
  473.                   if (!var13) {
  474.                      var4.insertElementAt(var21, 0);
  475.                   } else {
  476.                      var4.addElement(var21);
  477.                   }
  478.                }
  479.             }
  480.          }
  481.       }
  482.  
  483.       return var4;
  484.    }
  485.  
  486.    Stylesheet getStylesheetFromPIURL(String var1, Node var2, String var3, boolean var4) throws SAXException, MalformedURLException, FileNotFoundException, IOException {
  487.       Object var5 = null;
  488.       String[] var6 = new String[]{null};
  489.       var1 = var1.trim();
  490.       int var7 = var1.indexOf(35);
  491.       if (var7 == 0) {
  492.          this.diag("Locating stylesheet from fragment identifier...");
  493.          String var9 = var1.substring(1);
  494.          PrefixResolver var10 = this.getExecContext().getNamespaceContext();
  495.          XPathProcessorImpl var11 = new XPathProcessorImpl();
  496.          XPath var12 = new XPath();
  497.          var11.initXPath(var12, "id(" + var9 + ")", var10);
  498.          XObject var13 = var12.execute(this.getExecContext(), var2, var10);
  499.          NodeList var14 = var13.nodeset();
  500.          if (var14.getLength() == 0) {
  501.             var12 = new XPath();
  502.             var11.initXPath(var12, "//*[@id='" + var9 + "']", var10);
  503.             var13 = var12.execute(this.getExecContext(), var2, var10);
  504.             var14 = var13.nodeset();
  505.             if (var14.getLength() == 0) {
  506.                var12 = new XPath();
  507.                var11.initXPath(var12, "//*[@name='" + var9 + "']", var10);
  508.                var13 = var12.execute(this.getExecContext(), var2, var10);
  509.                var14 = var13.nodeset();
  510.                if (var14.getLength() == 0) {
  511.                   var12 = new XPath();
  512.                   var11.initXPath(var12, var9, var10);
  513.                   var13 = var12.execute(this.getExecContext(), var2, var10);
  514.                   var14 = var13.nodeset();
  515.                }
  516.             }
  517.          }
  518.  
  519.          if (var14.getLength() == 0) {
  520.             this.error(51, (Object[])(new Object[]{var9}));
  521.          }
  522.  
  523.          Node var15 = var14.item(0);
  524.          if (var15.getNodeType() == 1) {
  525.             this.pushTime(var15);
  526.             if (var4) {
  527.                this.m_stylesheetRoot = this.createStylesheetRoot(var6[0]);
  528.                var5 = this.m_stylesheetRoot;
  529.             } else {
  530.                var5 = new Stylesheet(this.m_stylesheetRoot, this, var6[0]);
  531.             }
  532.  
  533.             this.addTraceListenersToStylesheet();
  534.             StylesheetHandler var16 = new StylesheetHandler(this, (Stylesheet)var5);
  535.             TreeWalker var17 = new TreeWalker(var16);
  536.             var17.traverse(var15);
  537.             this.displayDuration("Setup of " + var1, var15);
  538.          } else {
  539.             Object var8 = null;
  540.             this.error(52, (Object[])(new Object[]{var9}));
  541.          }
  542.       } else {
  543.          this.diag(XSLMessages.createMessage(13, new Object[]{var1}));
  544.          this.pushTime(var1);
  545.          if (var4) {
  546.             this.m_stylesheetRoot = this.createStylesheetRoot(var1);
  547.             var5 = this.m_stylesheetRoot;
  548.          } else {
  549.             var5 = new Stylesheet(this.m_stylesheetRoot, this, var1);
  550.          }
  551.  
  552.          this.addTraceListenersToStylesheet();
  553.          StylesheetHandler var19 = new StylesheetHandler(this, (Stylesheet)var5);
  554.          URL var20 = this.getURLFromString(var1, var3);
  555.          XSLTInputSource var21 = new XSLTInputSource(var20.toString());
  556.          this.m_parserLiaison.setDocumentHandler(var19);
  557.          this.m_parserLiaison.parse(var21);
  558.          this.displayDuration("Parsing and init of " + var1, var1);
  559.       }
  560.  
  561.       return (Stylesheet)var5;
  562.    }
  563.  
  564.    public String findURIFromDoc(Document var1) {
  565.       return this.m_parserLiaison.findURIFromDoc(var1);
  566.    }
  567.  
  568.    public Hashtable getSourceDocsTable() {
  569.       return this.m_parserLiaison.getSourceDocsTable();
  570.    }
  571.  
  572.    public void setSourceDocument(String var1, Document var2) {
  573.       this.m_parserLiaison.getSourceDocsTable().put(var1, var2);
  574.    }
  575.  
  576.    public void outputToResultTree(Stylesheet var1, Object var2) throws SAXException, MalformedURLException, FileNotFoundException, IOException {
  577.       Object var3;
  578.       if (var2 instanceof XObject) {
  579.          var3 = (XObject)var2;
  580.       } else if (var2 instanceof String) {
  581.          var3 = new XString((String)var2);
  582.       } else if (var2 instanceof Boolean) {
  583.          var3 = new XBoolean((Boolean)var2);
  584.       } else if (var2 instanceof Double) {
  585.          var3 = new XNumber((Double)var2);
  586.       } else if (var2 instanceof DocumentFragment) {
  587.          var3 = new XRTreeFrag((DocumentFragment)var2);
  588.       } else if (var2 instanceof Node) {
  589.          var3 = new XNodeSet((Node)var2);
  590.       } else if (var2 instanceof NodeList) {
  591.          var3 = new XNodeSet((NodeList)var2);
  592.       } else {
  593.          var3 = new XString(var2.toString());
  594.       }
  595.  
  596.       int var4 = ((XObject)var3).getType();
  597.       switch (var4) {
  598.          case 1:
  599.          case 2:
  600.          case 3:
  601.             String var5 = ((XObject)var3).str();
  602.             this.m_resultTreeHandler.characters(var5.toCharArray(), 0, var5.length());
  603.             return;
  604.          case 4:
  605.             NodeList var6 = ((XObject)var3).nodeset();
  606.             int var7 = var6.getLength();
  607.  
  608.             for(int var8 = 0; var8 < var7; ++var8) {
  609.                Node var9 = var6.item(var8);
  610.  
  611.                Node var11;
  612.                for(Node var10 = var9; var9 != null; var9 = var11) {
  613.                   this.flushPending();
  614.                   this.cloneToResultTree(var1, var9, false, false, true);
  615.                   var11 = var9.getFirstChild();
  616.  
  617.                   while(var11 == null) {
  618.                      if (var9.getNodeType() == 1) {
  619.                         this.m_resultTreeHandler.endElement(var9.getNodeName());
  620.                      }
  621.  
  622.                      if (var10 == var9) {
  623.                         break;
  624.                      }
  625.  
  626.                      var11 = var9.getNextSibling();
  627.                      if (var11 == null) {
  628.                         var9 = var9.getParentNode();
  629.                         if (var10 == var9) {
  630.                            if (var9.getNodeType() == 1) {
  631.                               this.m_resultTreeHandler.endElement(var9.getNodeName());
  632.                            }
  633.  
  634.                            var11 = null;
  635.                            break;
  636.                         }
  637.                      }
  638.                   }
  639.                }
  640.             }
  641.  
  642.             return;
  643.          case 5:
  644.             this.outputResultTreeFragment((XObject)var3, this.m_parserLiaison);
  645.             return;
  646.          default:
  647.       }
  648.    }
  649.  
  650.    public boolean functionAvailable(String var1, String var2) {
  651.       return this.m_parserLiaison.functionAvailable(var1, var2);
  652.    }
  653.  
  654.    public boolean elementAvailable(String var1, String var2) {
  655.       return this.m_parserLiaison.elementAvailable(var1, var2);
  656.    }
  657.  
  658.    public Object extFunction(String var1, String var2, Vector var3, Object var4) throws SAXException {
  659.       return this.m_parserLiaison.extFunction(var1, var2, var3, var4);
  660.    }
  661.  
  662.    public void addTraceListener(TraceListener var1) throws TooManyListenersException {
  663.       if (this.m_traceListeners == null) {
  664.          this.m_traceListeners = new Vector();
  665.       }
  666.  
  667.       this.m_traceListeners.addElement(var1);
  668.       if (this.m_stylesheetRoot != null) {
  669.          this.m_stylesheetRoot.addTraceListener(var1);
  670.       }
  671.  
  672.    }
  673.  
  674.    void addTraceListenersToStylesheet() throws SAXException {
  675.       try {
  676.          if (this.m_traceListeners != null) {
  677.             int var1 = this.m_traceListeners.size();
  678.  
  679.             for(int var2 = 0; var2 < var1; ++var2) {
  680.                TraceListener var3 = (TraceListener)this.m_traceListeners.elementAt(var2);
  681.                if (this.m_stylesheetRoot != null) {
  682.                   this.m_stylesheetRoot.addTraceListener(var3);
  683.                }
  684.             }
  685.  
  686.          }
  687.       } catch (TooManyListenersException var4) {
  688.          throw new SAXException(XSLMessages.createMessage(103, (Object[])null), var4);
  689.       }
  690.    }
  691.  
  692.    public void removeTraceListener(TraceListener var1) {
  693.       if (this.m_traceListeners != null) {
  694.          this.m_traceListeners.removeElement(var1);
  695.       }
  696.  
  697.       if (this.m_stylesheetRoot != null) {
  698.          this.m_stylesheetRoot.removeTraceListener(var1);
  699.       }
  700.  
  701.    }
  702.  
  703.    void fireGenerateEvent(GenerateEvent var1) {
  704.       if (this.m_traceListeners != null) {
  705.          int var2 = this.m_traceListeners.size();
  706.  
  707.          for(int var3 = 0; var3 < var2; ++var3) {
  708.             TraceListener var4 = (TraceListener)this.m_traceListeners.elementAt(var3);
  709.             var4.generated(var1);
  710.          }
  711.       }
  712.  
  713.    }
  714.  
  715.    public void message(String var1) throws SAXException {
  716.       this.message((Node)null, (Node)null, var1);
  717.    }
  718.  
  719.    public void message(Node var1, Node var2, String var3) throws SAXException {
  720.       boolean var4 = this.getProblemListener().message(var3);
  721.       if (var4) {
  722.          throw new XSLProcessorException(var3);
  723.       }
  724.    }
  725.  
  726.    public void warn(int var1) throws SAXException {
  727.       this.warn((Node)null, (Node)null, var1, (Object[])null);
  728.    }
  729.  
  730.    public void warn(int var1, Object[] var2) throws SAXException {
  731.       this.warn((Node)null, (Node)null, var1, var2);
  732.    }
  733.  
  734.    public void warn(Node var1, Node var2, int var3) throws SAXException {
  735.       this.warn(var1, var2, var3, (Object[])null);
  736.    }
  737.  
  738.    public void warn(Node var1, Node var2, int var3, Object[] var4) throws SAXException {
  739.       String var5 = XSLMessages.createWarning(var3, var4);
  740.       Locator var6 = this.m_stylesheetLocatorStack.isEmpty() ? null : (Locator)this.m_stylesheetLocatorStack.peek();
  741.       String var7 = var6 == null ? null : (var6.getSystemId() == null ? var6.getPublicId() : var6.getSystemId());
  742.       boolean var8 = this.getProblemListener().problem((short)2, (short)1, var1, var2, var5, var7, var6 == null ? 0 : var6.getLineNumber(), var6 == null ? 0 : var6.getColumnNumber());
  743.       if (var8) {
  744.          throw new XSLProcessorException(var5);
  745.       }
  746.    }
  747.  
  748.    public void error(String var1) throws SAXException {
  749.       Locator var2 = this.m_stylesheetLocatorStack.isEmpty() ? null : (Locator)this.m_stylesheetLocatorStack.peek();
  750.       String var3 = var2 == null ? null : (var2.getSystemId() == null ? var2.getPublicId() : var2.getSystemId());
  751.       boolean var4 = this.getProblemListener().problem((short)2, (short)2, (Object)null, (Node)null, var1, var3, var2 == null ? 0 : var2.getLineNumber(), var2 == null ? 0 : var2.getColumnNumber());
  752.       if (var4) {
  753.          throw new XSLProcessorException("");
  754.       }
  755.    }
  756.  
  757.    public void error(int var1) throws SAXException {
  758.       this.error((Node)null, (Node)null, var1, (Object[])null);
  759.    }
  760.  
  761.    public void error(int var1, Object[] var2) throws SAXException {
  762.       this.error((Node)null, (Node)null, var1, var2);
  763.    }
  764.  
  765.    public void error(int var1, Exception var2) throws SAXException {
  766.       this.error(var1, (Object[])null, var2);
  767.    }
  768.  
  769.    public void error(int var1, Object[] var2, Exception var3) throws SAXException {
  770.       String var4 = XSLMessages.createMessage(var1, var2);
  771.       Locator var5 = this.m_stylesheetLocatorStack.isEmpty() ? null : (Locator)this.m_stylesheetLocatorStack.peek();
  772.       String var6 = var5 == null ? null : (var5.getSystemId() == null ? var5.getPublicId() : var5.getSystemId());
  773.       boolean var7 = this.getProblemListener().problem((short)2, (short)2, (Object)null, (Node)null, var4, var6, var5 == null ? 0 : var5.getLineNumber(), var5 == null ? 0 : var5.getColumnNumber());
  774.       if (var7) {
  775.          if (var3 instanceof XSLProcessorException) {
  776.             throw (XSLProcessorException)var3;
  777.          } else {
  778.             throw new XSLProcessorException(var4, var3);
  779.          }
  780.       }
  781.    }
  782.  
  783.    public void error(Node var1, Node var2, int var3) throws SAXException {
  784.       this.error(var1, var2, var3, (Object[])null);
  785.    }
  786.  
  787.    public void error(Node var1, Node var2, int var3, Object[] var4) throws SAXException {
  788.       String var5 = XSLMessages.createMessage(var3, var4);
  789.       Locator var6 = this.m_stylesheetLocatorStack.isEmpty() ? null : (Locator)this.m_stylesheetLocatorStack.peek();
  790.       String var7 = var6 == null ? null : (var6.getSystemId() == null ? var6.getPublicId() : var6.getSystemId());
  791.       boolean var8 = this.getProblemListener().problem((short)2, (short)2, var1, var2, var5, var7, var6 == null ? 0 : var6.getLineNumber(), var6 == null ? 0 : var6.getColumnNumber());
  792.       if (var8) {
  793.          throw new XSLProcessorException("");
  794.       }
  795.    }
  796.  
  797.    void pushTime(Object var1) {
  798.       if (var1 != null) {
  799.          this.m_durationsTable.put(var1, new Date());
  800.       }
  801.  
  802.    }
  803.  
  804.    long popDuration(Object var1) {
  805.       long var2 = 0L;
  806.       if (var1 != null) {
  807.          Date var4 = (Date)this.m_durationsTable.get(var1);
  808.          Date var5 = new Date();
  809.          var2 = var5.getTime() - var4.getTime();
  810.          this.m_durationsTable.remove(var1);
  811.       }
  812.  
  813.       return var2;
  814.    }
  815.  
  816.    protected void displayDuration(String var1, Object var2) {
  817.       long var3 = 0L;
  818.       if (var2 != null) {
  819.          Date var5 = (Date)this.m_durationsTable.get(var2);
  820.          Date var6 = new Date();
  821.          var3 = var6.getTime() - var5.getTime();
  822.          if (this.m_diagnosticsPrintWriter != null) {
  823.             this.m_diagnosticsPrintWriter.println(var1 + " took " + var3 + " milliseconds");
  824.          }
  825.  
  826.          this.m_durationsTable.remove(var2);
  827.       }
  828.  
  829.    }
  830.  
  831.    public void setDiagnosticsOutput(OutputStream var1) {
  832.       this.setDiagnosticsOutput(new PrintWriter(var1));
  833.    }
  834.  
  835.    public void setDiagnosticsOutput(PrintWriter var1) {
  836.       this.m_diagnosticsPrintWriter = var1;
  837.       if (this.getProblemListener() instanceof ProblemListenerDefault) {
  838.          ((ProblemListenerDefault)this.getProblemListener()).setDiagnosticsOutput(var1);
  839.       }
  840.  
  841.    }
  842.  
  843.    protected void diag(String var1) {
  844.       if (this.m_diagnosticsPrintWriter != null) {
  845.          this.m_diagnosticsPrintWriter.println(var1);
  846.       }
  847.  
  848.    }
  849.  
  850.    public void setTraceTemplates(boolean var1) {
  851.       this.m_traceTemplates = var1;
  852.    }
  853.  
  854.    public void setTraceSelect(boolean var1) {
  855.       this.m_traceSelects = var1;
  856.    }
  857.  
  858.    public void setTraceTemplateChildren(boolean var1) {
  859.       this.m_traceTemplateChildren = var1;
  860.    }
  861.  
  862.    public void setQuietConflictWarnings(boolean var1) {
  863.       this.m_quietConflictWarnings = var1;
  864.    }
  865.  
  866.    protected void traceSelect(Element var1, NodeList var2) throws SAXException {
  867.       String var3 = var1.getNodeName() + ": ";
  868.       Attr var4 = var1.getAttributeNode("select");
  869.       if (var4 != null) {
  870.          var3 = var3 + var4.getValue() + ", " + (var2 != null ? var2.getLength() : 0) + " selected";
  871.       } else {
  872.          var3 = var3 + "*|text(), (default select), " + var2.getLength() + " selected";
  873.       }
  874.  
  875.       var4 = var1.getAttributeNode("mode");
  876.       if (var4 != null) {
  877.          var3 = var3 + ", mode = " + var4.getValue();
  878.       }
  879.  
  880.       System.out.println(var3);
  881.    }
  882.  
  883.    protected void traceTemplate(Node var1) throws SAXException {
  884.       if (var1.getNodeType() == 1) {
  885.          Element var2 = (Element)var1;
  886.          Attr var4 = var2.getAttributeNode("match");
  887.          String var3;
  888.          if (var4 != null) {
  889.             var3 = "Calling template for: " + var4.getValue();
  890.          } else {
  891.             var4 = var2.getAttributeNode("name");
  892.             if (var4 != null) {
  893.                var3 = "Calling named template, name = " + var4.getValue();
  894.             } else {
  895.                int var5 = ((ElemTemplateElement)var2).getXSLToken();
  896.                if (var5 == 28) {
  897.                   var4 = var2.getAttributeNode("select");
  898.                   if (var4 != null) {
  899.                      var3 = "Processing for-each, select = " + var4.getValue();
  900.                   } else {
  901.                      this.error(53);
  902.                      var3 = null;
  903.                   }
  904.                } else {
  905.                   this.error(54);
  906.                   var3 = null;
  907.                }
  908.             }
  909.          }
  910.  
  911.          var4 = var2.getAttributeNode("mode");
  912.          if (var4 != null) {
  913.             var3 = var3 + ", mode = " + var4.getValue();
  914.          }
  915.  
  916.          System.out.println(var3);
  917.       }
  918.  
  919.    }
  920.  
  921.    protected void diagnoseTemplateChildren(Node var1, Node var2) {
  922.       if (this.m_traceTemplateChildren) {
  923.          String var3 = var1.getNodeName();
  924.          String var4 = var2.getNodeName();
  925.          this.diag("source node: " + var4 + ", template-node: " + var3);
  926.       }
  927.  
  928.    }
  929.  
  930.    protected void cloneToResultTree(Stylesheet var1, Node var2, boolean var3, boolean var4, boolean var5) throws SAXException, MalformedURLException, FileNotFoundException, IOException {
  931.       boolean var6 = false;
  932.       switch (var2.getNodeType()) {
  933.          case 1:
  934.             if (var5) {
  935.                this.copyAttributesToAttList((Element)var2, this.m_stylesheetRoot, this.m_pendingAttributes);
  936.                this.copySourceNSAttrs(var2, this.m_pendingAttributes);
  937.             }
  938.  
  939.             this.m_resultTreeHandler.startElement(var2.getNodeName());
  940.             return;
  941.          case 2:
  942.             this.addResultAttribute(this.m_pendingAttributes, ((Attr)var2).getName(), ((Attr)var2).getValue());
  943.             return;
  944.          case 3:
  945.             if (!var4) {
  946.                var6 = false;
  947.             }
  948.  
  949.             Text var12 = (Text)var2;
  950.             String var8 = null;
  951.             if (var6) {
  952.                if (!this.m_parserLiaison.isIgnorableWhitespace(var12)) {
  953.                   var8 = this.getNormalizedText(var12);
  954.                   if (var8 != null && this.isWhiteSpace(var8)) {
  955.                      var8 = null;
  956.                   }
  957.                }
  958.             } else {
  959.                Node var9 = var2.getParentNode();
  960.                if (var9 != null) {
  961.                   if (var9.getNodeType() != 9) {
  962.                      var8 = this.getNormalizedText(var12);
  963.                      if (var8 != null && var8.length() == 0) {
  964.                         var8 = null;
  965.                      }
  966.                   }
  967.                } else {
  968.                   var8 = this.getNormalizedText(var12);
  969.                   if (var8 != null && var8.length() == 0) {
  970.                      var8 = null;
  971.                   }
  972.                }
  973.             }
  974.  
  975.             if (var8 != null) {
  976.                if (this.m_parserLiaison.isIgnorableWhitespace(var12)) {
  977.                   this.m_resultTreeHandler.ignorableWhitespace(var8.toCharArray(), 0, var8.length());
  978.                   return;
  979.                }
  980.  
  981.                this.m_resultTreeHandler.characters(var8.toCharArray(), 0, var8.length());
  982.                return;
  983.             }
  984.             break;
  985.          case 4:
  986.             String var11 = ((CDATASection)var2).getData();
  987.             this.m_resultTreeHandler.cdata(var11.toCharArray(), 0, var11.length());
  988.             return;
  989.          case 5:
  990.             EntityReference var10 = (EntityReference)var2;
  991.             this.m_resultTreeHandler.entityReference(var10.getNodeName());
  992.             return;
  993.          case 6:
  994.          case 10:
  995.          default:
  996.             this.error(56, (Object[])(new Object[]{var2.getNodeName()}));
  997.             break;
  998.          case 7:
  999.             ProcessingInstruction var7 = (ProcessingInstruction)var2;
  1000.             this.m_resultTreeHandler.processingInstruction(var7.getTarget(), var7.getData());
  1001.             return;
  1002.          case 8:
  1003.             this.m_resultTreeHandler.comment(((Comment)var2).getData());
  1004.             return;
  1005.          case 9:
  1006.             break;
  1007.          case 11:
  1008.             this.error((Node)null, var2, 55);
  1009.             return;
  1010.       }
  1011.  
  1012.    }
  1013.  
  1014.    DocumentFragment createResultTreeFrag(Stylesheet var1, ElemTemplateElement var2, Node var3, Node var4, QName var5) throws SAXException, MalformedURLException, FileNotFoundException, IOException {
  1015.       DocumentFragment var6 = this.createDocFrag();
  1016.       DocumentHandler var7 = this.m_flistener;
  1017.       boolean var8 = this.m_mustFlushStartDoc;
  1018.       boolean var9 = this.m_pendingStartDoc;
  1019.       String var10 = this.m_pendingElementName;
  1020.       this.m_pendingElementName = null;
  1021.       MutableAttrListImpl var11 = this.m_pendingAttributes;
  1022.       this.m_pendingAttributes = new MutableAttrListImpl();
  1023.       this.m_flistener = new FormatterToDOM(this.getDOMFactory(), var6);
  1024.       var2.executeChildren(this, var3, var4, var5);
  1025.       this.m_pendingElementName = var10;
  1026.       this.m_pendingAttributes = var11;
  1027.       this.m_mustFlushStartDoc = var8;
  1028.       this.m_pendingStartDoc = var9;
  1029.       this.m_flistener = var7;
  1030.       return var6;
  1031.    }
  1032.  
  1033.    public void writeChildren(DocumentHandler var1, Stylesheet var2, ElemTemplateElement var3, Node var4, Node var5, QName var6) throws SAXException, MalformedURLException, FileNotFoundException, IOException {
  1034.       this.flushPending();
  1035.       DocumentHandler var7 = this.m_flistener;
  1036.       String var8 = this.m_pendingElementName;
  1037.       this.m_pendingElementName = null;
  1038.       MutableAttrListImpl var9 = this.m_pendingAttributes;
  1039.       this.m_pendingAttributes = new MutableAttrListImpl();
  1040.       this.m_flistener = var1;
  1041.       var3.executeChildren(this, var4, var5, var6);
  1042.       this.flushPending();
  1043.       this.m_flistener = var7;
  1044.       this.m_pendingElementName = var8;
  1045.       this.m_pendingAttributes = var9;
  1046.    }
  1047.  
  1048.    public void outputResultTreeFragment(XObject var1, XPathSupport var2) throws SAXException, MalformedURLException, FileNotFoundException, IOException {
  1049.       DocumentFragment var3 = var1.rtree(var2);
  1050.       NodeList var4 = var3.getChildNodes();
  1051.       int var5 = var4.getLength();
  1052.       TreeWalker var6 = new TreeWalker(this.m_flistener);
  1053.  
  1054.       for(int var7 = 0; var7 < var5; ++var7) {
  1055.          this.flushPending();
  1056.          var6.traverse(var4.item(var7));
  1057.       }
  1058.  
  1059.    }
  1060.  
  1061.    boolean isCDataResultElem(String var1) {
  1062.       boolean var2 = false;
  1063.       QName[] var3 = this.m_stylesheetRoot.m_cdataSectionElems;
  1064.       if (var3 != null) {
  1065.          String var4 = null;
  1066.          Object var5 = null;
  1067.          int var6 = var1.indexOf(58);
  1068.          if (var6 > 0) {
  1069.             String var7 = var1.substring(0, var6);
  1070.             if (var7.equals("xml")) {
  1071.                var4 = "http://www.w3.org/XML/1998/namespace";
  1072.             } else {
  1073.                var4 = this.getResultNamespaceForPrefix(var7);
  1074.             }
  1075.  
  1076.             if (var4 == null) {
  1077.                throw new RuntimeException(XSLMessages.createMessage(99, new Object[]{var7}));
  1078.             }
  1079.          }
  1080.  
  1081.          String var10 = var6 < 0 ? var1 : var1.substring(var6 + 1);
  1082.  
  1083.          for(QName var9 : var3) {
  1084.             var2 = var9.equals(var4, var10);
  1085.             if (var2) {
  1086.                break;
  1087.             }
  1088.          }
  1089.       }
  1090.  
  1091.       return var2;
  1092.    }
  1093.  
  1094.    boolean qnameEqualsResultElemName(QName var1, String var2) {
  1095.       String var3 = null;
  1096.       Object var4 = null;
  1097.       int var5 = var2.indexOf(58);
  1098.       if (var5 > 0) {
  1099.          String var6 = var2.substring(0, var5);
  1100.          if (var6.equals("xml")) {
  1101.             var3 = "http://www.w3.org/XML/1998/namespace";
  1102.          } else {
  1103.             var3 = this.getResultNamespaceForPrefix(var6);
  1104.          }
  1105.  
  1106.          if (var3 == null) {
  1107.             throw new RuntimeException(XSLMessages.createMessage(99, new Object[]{var6}));
  1108.          }
  1109.       }
  1110.  
  1111.       String var7 = var5 < 0 ? var2 : var2.substring(var5 + 1);
  1112.       return var1.equals(var3, var7);
  1113.    }
  1114.  
  1115.    String getResultNamespaceForPrefix(String var1) {
  1116.       String var2 = null;
  1117.       int var3 = this.m_resultNameSpaces.size();
  1118.  
  1119.       for(int var4 = var3 - 1; var4 >= 0 && var2 == null; --var4) {
  1120.          ResultNameSpace var5 = (ResultNameSpace)this.m_resultNameSpaces.elementAt(var4);
  1121.          if (m_emptyNamespace != var5) {
  1122.             while(var5 != null) {
  1123.                if (var5.m_prefix.equals(var1)) {
  1124.                   var2 = var5.m_uri;
  1125.                   break;
  1126.                }
  1127.  
  1128.                var5 = var5.m_next;
  1129.             }
  1130.          }
  1131.       }
  1132.  
  1133.       return var2;
  1134.    }
  1135.  
  1136.    String getResultPrefixForNamespace(String var1) {
  1137.       String var2 = null;
  1138.       int var3 = this.m_resultNameSpaces.size();
  1139.  
  1140.       for(int var4 = var3 - 1; var4 >= 0 && var2 == null; --var4) {
  1141.          ResultNameSpace var5 = (ResultNameSpace)this.m_resultNameSpaces.elementAt(var4);
  1142.          if (m_emptyNamespace != var5) {
  1143.             while(var5 != null) {
  1144.                if (var5.m_uri.equals(var1)) {
  1145.                   var2 = var5.m_prefix;
  1146.                   break;
  1147.                }
  1148.  
  1149.                var5 = var5.m_next;
  1150.             }
  1151.          }
  1152.       }
  1153.  
  1154.       return var2;
  1155.    }
  1156.  
  1157.    private String getPrefixForNamespace(String var1, Element var2) {
  1158.       Object var4 = var2;
  1159.  
  1160.       short var3;
  1161.       String var5;
  1162.       for(var5 = null; var4 != null && var5 == null && ((var3 = ((Node)var4).getNodeType()) == 1 || var3 == 5); var4 = this.m_parserLiaison.getParentOfNode((Node)var4)) {
  1163.          if (var3 == 1) {
  1164.             NamedNodeMap var6 = ((Node)var4).getAttributes();
  1165.  
  1166.             for(int var7 = 0; var7 < var6.getLength(); ++var7) {
  1167.                Node var8 = var6.item(var7);
  1168.                String var9 = var8.getNodeName();
  1169.                boolean var10 = var9.startsWith("xmlns:");
  1170.                if (var10 || var9.equals("xmlns")) {
  1171.                   int var11 = var9.indexOf(58);
  1172.                   String var12 = var8.getNodeValue();
  1173.                   if (var12 != null && var12.equals(var1)) {
  1174.                      var5 = var10 ? var9.substring(var11 + 1) : "";
  1175.                   }
  1176.                }
  1177.             }
  1178.          }
  1179.       }
  1180.  
  1181.       return var5;
  1182.    }
  1183.  
  1184.    void copySourceNSAttrs(Node var1, MutableAttrListImpl var2) {
  1185.       short var3;
  1186.       for(Node var4 = var1; var4 != null && ((var3 = var4.getNodeType()) == 1 || var3 == 5); var4 = var4.getParentNode()) {
  1187.          if (var3 == 1) {
  1188.             NamedNodeMap var5 = var4.getAttributes();
  1189.             int var6 = var5.getLength();
  1190.  
  1191.             for(int var7 = 0; var7 < var6; ++var7) {
  1192.                Node var8 = var5.item(var7);
  1193.                String var9 = var8.getNodeName();
  1194.                boolean var10 = var9.startsWith("xmlns:");
  1195.                if (var10 || var9.equals("xmlns")) {
  1196.                   String var11 = var10 ? var9.substring(6) : "";
  1197.                   String var12 = this.getResultNamespaceForPrefix(var11);
  1198.                   String var13 = var8.getNodeValue();
  1199.                   if (!var13.equalsIgnoreCase(var12)) {
  1200.                      this.addResultAttribute(this.m_pendingAttributes, var9, var13);
  1201.                   }
  1202.                }
  1203.             }
  1204.          }
  1205.       }
  1206.  
  1207.    }
  1208.  
  1209.    static final String getAttrVal(Element var0, String var1, Node var2) {
  1210.       Attr var3 = var0.getAttributeNode(var1);
  1211.       return var3 == null ? null : var3.getValue();
  1212.    }
  1213.  
  1214.    static final String getAttrVal(Element var0, String var1) {
  1215.       Attr var2 = var0.getAttributeNode(var1);
  1216.       return var2 == null ? null : var2.getValue();
  1217.    }
  1218.  
  1219.    protected void copyAttributeToTarget(Attr var1, Node var2, Stylesheet var3, MutableAttrListImpl var4, Element var5) throws SAXException, MalformedURLException, FileNotFoundException, IOException {
  1220.       String var6 = var1.getName().trim();
  1221.       String var7 = var1.getValue();
  1222.       if (var7 != null) {
  1223.          if ((var6.equals("xmlns") || var6.startsWith("xmlns:")) && var7.startsWith("quote:")) {
  1224.             var7 = var7.substring(6);
  1225.          }
  1226.  
  1227.          this.addResultAttribute(var4, var6, var7);
  1228.       }
  1229.  
  1230.    }
  1231.  
  1232.    protected void copyAttributesToAttList(Element var1, Stylesheet var2, MutableAttrListImpl var3) throws SAXException, MalformedURLException, FileNotFoundException, IOException {
  1233.       NamedNodeMap var4 = var1.getAttributes();
  1234.       int var5 = var4 != null ? var4.getLength() : 0;
  1235.       Object var6 = null;
  1236.  
  1237.       for(int var7 = 0; var7 < var5; ++var7) {
  1238.          Attr var8 = (Attr)var4.item(var7);
  1239.          if (this.m_parserLiaison.getExpandedAttributeName(var8).equals(this.m_stylesheetRoot.m_XSLNameSpaceURL + ":use")) {
  1240.             String var9 = var8.getValue();
  1241.          } else {
  1242.             this.copyAttributeToTarget(var8, var1, var2, var3, var1);
  1243.          }
  1244.       }
  1245.  
  1246.    }
  1247.  
  1248.    public boolean shouldStripSourceNode(Node var1) throws SAXException {
  1249.       if (this.m_stylesheetRoot != null && (this.m_stylesheetRoot.m_whitespacePreservingElements != null || this.m_stylesheetRoot.m_whitespaceStrippingElements != null)) {
  1250.          boolean var2 = false;
  1251.          short var3 = var1.getNodeType();
  1252.          if (var3 == 3 || var3 == 4) {
  1253.             if (!this.m_parserLiaison.isIgnorableWhitespace((Text)var1)) {
  1254.                String var4 = ((Text)var1).getData();
  1255.                if (var4 == null) {
  1256.                   return true;
  1257.                }
  1258.  
  1259.                if (!this.isWhiteSpace(var4)) {
  1260.                   return false;
  1261.                }
  1262.             }
  1263.  
  1264.             for(Node var14 = this.m_parserLiaison.getParentOfNode(var1); var14 != null; var14 = var14.getParentNode()) {
  1265.                if (var14.getNodeType() == 1) {
  1266.                   Element var10000 = (Element)var14;
  1267.                   double var5 = Double.NEGATIVE_INFINITY;
  1268.                   double var7 = Double.NEGATIVE_INFINITY;
  1269.                   if (this.m_stylesheetRoot != null) {
  1270.                      if (this.m_stylesheetRoot.m_whitespacePreservingElements != null) {
  1271.                         int var9 = this.m_stylesheetRoot.m_whitespacePreservingElements.size();
  1272.  
  1273.                         for(int var10 = 0; var10 < var9; ++var10) {
  1274.                            XPath var11 = (XPath)this.m_stylesheetRoot.m_whitespacePreservingElements.elementAt(var10);
  1275.                            double var12 = var11.getMatchScore(this.getExecContext(), var14);
  1276.                            if (var12 > var5) {
  1277.                               var5 = var12;
  1278.                            }
  1279.                         }
  1280.                      }
  1281.  
  1282.                      if (this.m_stylesheetRoot.m_whitespaceStrippingElements != null) {
  1283.                         int var15 = this.m_stylesheetRoot.m_whitespaceStrippingElements.size();
  1284.  
  1285.                         for(int var16 = 0; var16 < var15; ++var16) {
  1286.                            XPath var17 = (XPath)this.m_stylesheetRoot.m_whitespaceStrippingElements.elementAt(var16);
  1287.                            double var18 = var17.getMatchScore(this.getExecContext(), var14);
  1288.                            if (var18 > var7) {
  1289.                               var7 = var18;
  1290.                            }
  1291.                         }
  1292.                      }
  1293.                   }
  1294.  
  1295.                   if (var5 > Double.NEGATIVE_INFINITY || var7 > Double.NEGATIVE_INFINITY) {
  1296.                      if (var5 > var7) {
  1297.                         var2 = false;
  1298.                      } else if (var7 > var5) {
  1299.                         var2 = true;
  1300.                      } else {
  1301.                         this.warn(15);
  1302.                      }
  1303.                      break;
  1304.                   }
  1305.                }
  1306.             }
  1307.          }
  1308.  
  1309.          return var2;
  1310.       } else {
  1311.          return false;
  1312.       }
  1313.    }
  1314.  
  1315.    static boolean isSpace(char var0) {
  1316.       return var0 == ' ' || var0 == '\t' || var0 == '\r' || var0 == '\n';
  1317.    }
  1318.  
  1319.    boolean isWhiteSpace(String var1) {
  1320.       int var2 = var1.length();
  1321.  
  1322.       for(int var3 = 0; var3 < var2; ++var3) {
  1323.          if (!isSpace(var1.charAt(var3))) {
  1324.             return false;
  1325.          }
  1326.       }
  1327.  
  1328.       return true;
  1329.    }
  1330.  
  1331.    String fixWhiteSpace(String var1, boolean var2, boolean var3, boolean var4) {
  1332.       char[] var5 = var1.toCharArray();
  1333.       int var6 = var5.length;
  1334.       boolean var7 = false;
  1335.  
  1336.       int var8;
  1337.       for(var8 = 0; var8 < var6 && !isSpace(var5[var8]); ++var8) {
  1338.       }
  1339.  
  1340.       int var9 = var8;
  1341.  
  1342.       for(boolean var10 = false; var8 < var6; ++var8) {
  1343.          char var11 = var5[var8];
  1344.          if (isSpace(var11)) {
  1345.             if (!var10) {
  1346.                if (var11 != ' ') {
  1347.                   var7 = true;
  1348.                }
  1349.  
  1350.                var5[var9++] = ' ';
  1351.                if (var4 && var8 != 0) {
  1352.                   char var12 = var5[var8 - 1];
  1353.                   if (var12 != '.' && var12 != '!' && var12 != '?') {
  1354.                      var10 = true;
  1355.                   }
  1356.                } else {
  1357.                   var10 = true;
  1358.                }
  1359.             } else {
  1360.                var7 = true;
  1361.                var10 = true;
  1362.             }
  1363.          } else {
  1364.             var5[var9++] = var11;
  1365.             var10 = false;
  1366.          }
  1367.       }
  1368.  
  1369.       if (var3 && var9 >= 1 && var5[var9 - 1] == ' ') {
  1370.          var7 = true;
  1371.          --var9;
  1372.       }
  1373.  
  1374.       int var13 = 0;
  1375.       if (var2 && var9 > 0 && var5[0] == ' ') {
  1376.          var7 = true;
  1377.          ++var13;
  1378.       }
  1379.  
  1380.       if (var7) {
  1381.          return new String(var5, var13, var9 - var13);
  1382.       } else {
  1383.          return var1;
  1384.       }
  1385.    }
  1386.  
  1387.    String trim(String var1) {
  1388.       char[] var2 = var1.toCharArray();
  1389.       int var3 = var2.length;
  1390.       boolean var4 = false;
  1391.       int var5 = 0;
  1392.       int var6 = 0;
  1393.       if (var3 > 0) {
  1394.          for(var5 = 0; var5 < var3 && isSpace(var2[var5]); ++var5) {
  1395.          }
  1396.  
  1397.          for(var6 = var3; var6 > var5 && isSpace(var2[var6 - 1]); --var6) {
  1398.          }
  1399.  
  1400.          var4 = var5 > 0 || var6 < var3;
  1401.       }
  1402.  
  1403.       return var4 ? new String(var2, var5, var6 - var5) : var1;
  1404.    }
  1405.  
  1406.    int trimLen(String var1) {
  1407.       char[] var2 = var1.toCharArray();
  1408.       int var3 = var2.length;
  1409.  
  1410.       int var4;
  1411.       for(var4 = 0; var4 < var3 && isSpace(var2[var4]); ++var4) {
  1412.       }
  1413.  
  1414.       int var5;
  1415.       for(var5 = var3; var5 > var4 && isSpace(var2[var5 - 1]); --var5) {
  1416.       }
  1417.  
  1418.       return var5 - var4;
  1419.    }
  1420.  
  1421.    String getNormalizedText(Text var1) {
  1422.       return var1.getData();
  1423.    }
  1424.  
  1425.    public XPathSupport getExecContext() {
  1426.       return this.m_parserLiaison;
  1427.    }
  1428.  
  1429.    public void setExecContext(XMLParserLiaison var1) {
  1430.       this.m_parserLiaison = var1;
  1431.       var1.setEnvSupport(this);
  1432.    }
  1433.  
  1434.    public XMLParserLiaison getXMLProcessorLiaison() {
  1435.       return this.m_parserLiaison;
  1436.    }
  1437.  
  1438.    public XString createXString(String var1) {
  1439.       return new XString(var1);
  1440.    }
  1441.  
  1442.    public XObject createXObject(Object var1) {
  1443.       return new XObject(var1);
  1444.    }
  1445.  
  1446.    public XNumber createXNumber(double var1) {
  1447.       return new XNumber(var1);
  1448.    }
  1449.  
  1450.    public XBoolean createXBoolean(boolean var1) {
  1451.       return new XBoolean(var1);
  1452.    }
  1453.  
  1454.    public XNodeSet createXNodeSet(NodeList var1) {
  1455.       return new XNodeSet(var1);
  1456.    }
  1457.  
  1458.    public XNodeSet createXNodeSet(Node var1) {
  1459.       return new XNodeSet(var1);
  1460.    }
  1461.  
  1462.    public XNull createXNull() {
  1463.       return new XNull();
  1464.    }
  1465.  
  1466.    public NodeList getNodeSetByKey(Node var1, String var2, String var3, PrefixResolver var4) throws SAXException {
  1467.       NodeList var5 = this.m_stylesheetRoot.getNodeSetByKey(this, var1, var2, var3, var4);
  1468.       if (var5 == null) {
  1469.          this.error(58, (Object[])(new Object[]{var2}));
  1470.       }
  1471.  
  1472.       return var5;
  1473.    }
  1474.  
  1475.    Element getElementByID(String var1, Document var2) {
  1476.       return this.m_parserLiaison.getElementByID(var1, var2);
  1477.    }
  1478.  
  1479.    public XObject getVariable(QName var1) throws SAXException {
  1480.       Object var2 = this.getVarStack().getVariable(var1);
  1481.       if (var2 != null && !(var2 instanceof XObject)) {
  1482.          var2 = new XObject(var2);
  1483.       }
  1484.  
  1485.       return (XObject)var2;
  1486.    }
  1487.  
  1488.    public XLocator getXLocatorFromNode(Node var1) {
  1489.       return this.m_parserLiaison.getXLocatorFromNode(var1);
  1490.    }
  1491.  
  1492.    public void associateXLocatorToNode(Node var1, XLocator var2) {
  1493.       this.m_parserLiaison.associateXLocatorToNode(var1, var2);
  1494.    }
  1495.  
  1496.    DocumentFragment createDocFrag() {
  1497.       return new ResultTreeFrag(this.getDOMFactory(), this.m_parserLiaison);
  1498.    }
  1499.  
  1500.    /** @deprecated */
  1501.    public String getStyleSheetURIfromDoc(Node var1) {
  1502.       String var2 = null;
  1503.  
  1504.       for(Node var3 = var1.getFirstChild(); var3 != null; var3 = var3.getNextSibling()) {
  1505.          if (var3.getNodeType() == 7) {
  1506.             ProcessingInstruction var4 = (ProcessingInstruction)var3;
  1507.             if (var4.getNodeName().equals("xml-stylesheet") || var4.getNodeName().equals("xml:stylesheet")) {
  1508.                boolean var5 = true;
  1509.                StringTokenizer var6 = new StringTokenizer(var4.getNodeValue(), " \t=");
  1510.  
  1511.                while(var6.hasMoreTokens()) {
  1512.                   if (var6.nextToken().equals("type")) {
  1513.                      String var7 = var6.nextToken();
  1514.                      var7 = var7.substring(1, var7.length() - 1);
  1515.                      if (!var7.equals("text/xsl")) {
  1516.                         var5 = false;
  1517.                      }
  1518.                   }
  1519.                }
  1520.  
  1521.                if (var5) {
  1522.                   var6 = new StringTokenizer(var4.getNodeValue(), " \t=");
  1523.  
  1524.                   while(var6.hasMoreTokens()) {
  1525.                      if (var6.nextToken().equals("href")) {
  1526.                         var2 = var6.nextToken();
  1527.                         var2 = var2.substring(1, var2.length() - 1);
  1528.                      }
  1529.                   }
  1530.                   break;
  1531.                }
  1532.             }
  1533.          }
  1534.       }
  1535.  
  1536.       return var2;
  1537.    }
  1538.  
  1539.    public void setStylesheetParam(String var1, String var2) {
  1540.       QName var3 = new QName(var1, this.m_parserLiaison.getNamespaceContext());
  1541.       this.m_topLevelParams.addElement(new Arg(var3, var2, true));
  1542.    }
  1543.  
  1544.    public void setStylesheetParam(String var1, XObject var2) {
  1545.       QName var3 = new QName(var1, this.m_parserLiaison.getNamespaceContext());
  1546.       this.m_topLevelParams.addElement(new Arg(var3, var2));
  1547.    }
  1548.  
  1549.    void resolveTopLevelParams() throws SAXException, MalformedURLException, FileNotFoundException, IOException, SAXException {
  1550.       this.m_stylesheetRoot.pushTopLevelVariables(this.m_topLevelParams, this);
  1551.       this.getVarStack().markGlobalStackFrame();
  1552.    }
  1553.  
  1554.    public Node getSourceNode() {
  1555.       return this.m_currentNode;
  1556.    }
  1557.  
  1558.    public Node getSourceNode(String var1, PrefixResolver var2) throws SAXException, MalformedURLException, FileNotFoundException, IOException {
  1559.       XObject var3 = this.m_stylesheetRoot.evalXPathStr(this.getExecContext(), var1, this.m_currentNode, var2);
  1560.       NodeList var4 = var3.nodeset();
  1561.       return var4 != null && var4.getLength() > 0 ? var4.item(0) : null;
  1562.    }
  1563.  
  1564.    protected final void resetCurrentState(Node var1) {
  1565.       this.m_currentNode = var1;
  1566.    }
  1567.  
  1568.    protected Element findElementByAttribute(Node var1, String var2, String var3, String var4) {
  1569.       Element var5 = null;
  1570.       String var6 = var1.getNodeName();
  1571.       if (var2 == null || var6.equals(var2)) {
  1572.          NamedNodeMap var7 = var1.getAttributes();
  1573.  
  1574.          try {
  1575.             int var8 = var7 != null ? var7.getLength() : 0;
  1576.  
  1577.             for(int var9 = 0; var9 < var8; ++var9) {
  1578.                Attr var10 = (Attr)var7.item(var9);
  1579.                String var11 = var10.getName();
  1580.                if (var11 != null && var11.equals(var3)) {
  1581.                   String var12 = var10.getValue();
  1582.                   if (var12.equals(var4)) {
  1583.                      var5 = (Element)var1;
  1584.                      break;
  1585.                   }
  1586.                }
  1587.             }
  1588.          } catch (DOMException var13) {
  1589.          }
  1590.       }
  1591.  
  1592.       if (var5 == null) {
  1593.          for(Node var14 = var1.getFirstChild(); var14 != null; var14 = var14.getNextSibling()) {
  1594.             if (var14.getNodeType() == 1) {
  1595.                String var15 = var14.getNodeName();
  1596.                if (var15 != null) {
  1597.                   var5 = this.findElementByAttribute(var14, var2, var3, var4);
  1598.                   if (var5 != null) {
  1599.                      break;
  1600.                   }
  1601.                }
  1602.             }
  1603.          }
  1604.       }
  1605.  
  1606.       return var5;
  1607.    }
  1608.  
  1609.    URL getURLFromString(String var1) throws MalformedURLException {
  1610.       Object var2 = null;
  1611.  
  1612.       try {
  1613.          var7 = new URL(var1);
  1614.       } catch (MalformedURLException var6) {
  1615.          try {
  1616.             String var3 = (new File(var1)).getAbsolutePath();
  1617.             String var4 = "file:" + var3;
  1618.             var7 = new URL(var4);
  1619.          } catch (MalformedURLException var5) {
  1620.             this.diag(XSLMessages.createMessage(59, new Object[]{var1}));
  1621.             throw var5;
  1622.          }
  1623.       }
  1624.  
  1625.       return var7;
  1626.    }
  1627.  
  1628.    public DocumentHandler getDocumentHandler() {
  1629.       return this.m_flistener;
  1630.    }
  1631.  
  1632.    public void setDocumentHandler(DocumentHandler var1) {
  1633.       this.m_flistener = var1;
  1634.    }
  1635.  
  1636.    public DocumentHandler getFormatterListener() {
  1637.       return this.m_flistener;
  1638.    }
  1639.  
  1640.    public void setFormatterListener(DocumentHandler var1) {
  1641.       this.m_flistener = var1;
  1642.    }
  1643.  
  1644.    public void setDOMFactory(Document var1) {
  1645.       this.getXMLProcessorLiaison().setDOMFactory(var1);
  1646.    }
  1647.  
  1648.    public Document getDOMFactory() {
  1649.       return this.getXMLProcessorLiaison().getDOMFactory();
  1650.    }
  1651.  
  1652.    public void setProblemListener(ProblemListener var1) {
  1653.       this.m_parserLiaison.setProblemListener(var1);
  1654.    }
  1655.  
  1656.    public ProblemListener getProblemListener() {
  1657.       return this.m_parserLiaison.getProblemListener();
  1658.    }
  1659.  
  1660.    public void setOutputStream(OutputStream var1) {
  1661.       this.m_outputStream = var1;
  1662.    }
  1663.  
  1664.    public void setDocumentLocator(Locator var1) {
  1665.    }
  1666.  
  1667.    public void startDocument() throws SAXException {
  1668.       ErrorHandler var1 = this.m_parserLiaison.getErrorHandler();
  1669.       XercesLiaison var2 = new XercesLiaison(var1);
  1670.       var2.copyFromOtherLiaison((XMLParserLiaisonDefault)this.m_parserLiaison);
  1671.       this.setExecContext(var2);
  1672.       Document var3 = this.m_parserLiaison.createDocument();
  1673.       this.m_sourceTreeHandler = new FormatterToDOM(var3);
  1674.       this.resetCurrentState(var3);
  1675.       this.m_rootDoc = var3;
  1676.  
  1677.       try {
  1678.          this.getVarStack().pushContextMarker();
  1679.          this.resolveTopLevelParams();
  1680.       } catch (Exception var5) {
  1681.          throw new SAXException(((Throwable)var5).getMessage(), var5);
  1682.       }
  1683.  
  1684.       this.m_sourceTreeHandler.startDocument();
  1685.    }
  1686.  
  1687.    public void endDocument() throws SAXException {
  1688.       this.m_sourceTreeHandler.endDocument();
  1689.  
  1690.       try {
  1691.          XSLTResultTarget var1 = this.m_outputStream == null ? new XSLTResultTarget(this.m_flistener) : new XSLTResultTarget(this.m_outputStream);
  1692.          this.m_stylesheetRoot.process(this, this.m_sourceTreeHandler.getRootNode(), var1);
  1693.       } catch (Exception var2) {
  1694.          if (!(var2 instanceof SAXException)) {
  1695.             throw new SAXException(var2);
  1696.          }
  1697.  
  1698.          throw (SAXException)var2;
  1699.       }
  1700.  
  1701.       this.m_sourceTreeHandler = null;
  1702.    }
  1703.  
  1704.    public void startElement(String var1, AttributeList var2) throws SAXException {
  1705.       this.m_sourceTreeHandler.startElement(var1, var2);
  1706.    }
  1707.  
  1708.    public void endElement(String var1) throws SAXException {
  1709.       this.m_sourceTreeHandler.endElement(var1);
  1710.    }
  1711.  
  1712.    public void startCDATA() throws SAXException {
  1713.       this.m_isCData = true;
  1714.    }
  1715.  
  1716.    public void endCDATA() throws SAXException {
  1717.       this.m_isCData = false;
  1718.    }
  1719.  
  1720.    public void characters(char[] var1, int var2, int var3) throws SAXException {
  1721.       if (this.m_isCData) {
  1722.          this.m_sourceTreeHandler.cdata(var1, var2, var3);
  1723.       } else {
  1724.          this.m_sourceTreeHandler.characters(var1, var2, var3);
  1725.       }
  1726.    }
  1727.  
  1728.    public void charactersRaw(char[] var1, int var2, int var3) throws SAXException {
  1729.       this.m_sourceTreeHandler.charactersRaw(var1, var2, var3);
  1730.    }
  1731.  
  1732.    public void ignorableWhitespace(char[] var1, int var2, int var3) throws SAXException {
  1733.       this.m_sourceTreeHandler.charactersRaw(var1, var2, var3);
  1734.    }
  1735.  
  1736.    public void processingInstruction(String var1, String var2) throws SAXException {
  1737.       this.m_sourceTreeHandler.processingInstruction(var1, var2);
  1738.    }
  1739.  
  1740.    public void comment(char[] var1, int var2, int var3) throws SAXException {
  1741.       this.m_sourceTreeHandler.comment(var1, var2, var3);
  1742.    }
  1743.  
  1744.    public void startEntity(String var1) throws SAXException {
  1745.       this.m_sourceTreeHandler.startEntity(var1);
  1746.    }
  1747.  
  1748.    public void endEntity(String var1) throws SAXException {
  1749.       this.m_sourceTreeHandler.endEntity(var1);
  1750.    }
  1751.  
  1752.    public void startDTD(String var1, String var2, String var3) throws SAXException {
  1753.    }
  1754.  
  1755.    public void endDTD() throws SAXException {
  1756.    }
  1757.  
  1758.    void addResultAttribute(MutableAttrListImpl var1, String var2, String var3) {
  1759.       boolean var4 = var2.startsWith("xmlns:");
  1760.       if (var2.equals("xmlns") || var4) {
  1761.          String var5 = var4 ? var2.substring(6) : "";
  1762.          ResultNameSpace var6 = new ResultNameSpace(var5, var3);
  1763.          if (!this.m_resultNameSpaces.isEmpty()) {
  1764.             ResultNameSpace var7 = (ResultNameSpace)this.m_resultNameSpaces.peek();
  1765.             if (m_emptyNamespace == var7) {
  1766.                this.m_resultNameSpaces.setElementAt(var6, this.m_resultNameSpaces.size() - 1);
  1767.             } else {
  1768.                while(var7.m_next != null) {
  1769.                   var7 = var7.m_next;
  1770.                }
  1771.  
  1772.                var7.m_next = var6;
  1773.             }
  1774.          }
  1775.       }
  1776.  
  1777.       var1.addAttribute(var2, "CDATA", var3);
  1778.    }
  1779.  
  1780.    private boolean pendingHasDefaultNS() {
  1781.       if (this.m_pendingAttributes != null) {
  1782.          int var1 = this.m_pendingAttributes.getLength();
  1783.  
  1784.          for(int var2 = 0; var2 < var1; ++var2) {
  1785.             if (this.m_pendingAttributes.getName(var2).equals("xmlns")) {
  1786.                return true;
  1787.             }
  1788.          }
  1789.       }
  1790.  
  1791.       return false;
  1792.    }
  1793.  
  1794.    private String excludePrefix(String var1) {
  1795.       if (this.m_stylesheetRoot != null) {
  1796.          int var2 = var1.indexOf(58);
  1797.          if (var2 > 0) {
  1798.             String var3 = var1.substring(0, var2);
  1799.             StringToStringTable var4 = this.m_stylesheetRoot.getExcludeResultPrefixes();
  1800.             if (var4 != null && var4.contains(var3)) {
  1801.                var1 = var1.substring(var2 + 1);
  1802.             }
  1803.          }
  1804.       }
  1805.  
  1806.       return var1;
  1807.    }
  1808.  
  1809.    protected void flushPending() throws SAXException {
  1810.       if (this.m_pendingStartDoc && this.m_pendingElementName != null && !this.m_stylesheetRoot.isOutputMethodSet() && this.m_pendingElementName.equalsIgnoreCase("html") && !this.pendingHasDefaultNS()) {
  1811.          FormatterToXML var1;
  1812.          try {
  1813.             var1 = (FormatterToXML)this.m_flistener;
  1814.          } catch (ClassCastException var2) {
  1815.             var1 = null;
  1816.          }
  1817.  
  1818.          if (var1 != null) {
  1819.             this.m_stylesheetRoot.setOutputMethod("html");
  1820.             this.m_flistener = new FormatterToHTML(var1);
  1821.          }
  1822.       }
  1823.  
  1824.       if (this.m_pendingStartDoc && this.m_mustFlushStartDoc) {
  1825.          this.m_pendingStartDoc = false;
  1826.          this.m_flistener.startDocument();
  1827.          if (this.m_traceListeners != null) {
  1828.             this.fireGenerateEvent(new GenerateEvent(this, 1));
  1829.          }
  1830.       }
  1831.  
  1832.       if (this.m_pendingElementName != null && this.m_mustFlushStartDoc) {
  1833.          if (this.m_stylesheetRoot.m_cdataSectionElems != null) {
  1834.             if (this.isCDataResultElem(this.m_pendingElementName)) {
  1835.                this.m_cdataStack.push(TRUE);
  1836.             } else {
  1837.                this.m_cdataStack.push(FALSE);
  1838.             }
  1839.          }
  1840.  
  1841.          this.m_flistener.startElement(this.m_pendingElementName, this.m_pendingAttributes);
  1842.          if (this.m_traceListeners != null) {
  1843.             this.fireGenerateEvent(new GenerateEvent(this, 3, this.m_pendingElementName, this.m_pendingAttributes));
  1844.          }
  1845.  
  1846.          this.m_pendingAttributes.clear();
  1847.          this.m_pendingElementName = null;
  1848.       }
  1849.  
  1850.    }
  1851.  
  1852.    // $FF: synthetic method
  1853.    static VariableStack access$0(XSLTEngineImpl var0) {
  1854.       return var0.m_variableStacks;
  1855.    }
  1856.  
  1857.    // $FF: synthetic method
  1858.    static Boolean access$1() {
  1859.       return TRUE;
  1860.    }
  1861. }
  1862.